/** ***********************************************************************************
* @file         gaoz_api.c
* @brief        底层服务层与应用层中间接口
* @details      主要用于定义中间基础服务层与应用层中间的使用接口
* @author       杨小珛
* @date         2021/01/30
* @copyright    北京高知科技有限公司    
* @version      V1.0
* @attention    无
**************************************************************************************/

#include "gaoz_api.h"


/***************************MOC TASK 系统监控数据处理接口************************************/

/** ****************************************************************************
* @remarks       uint32_t gaoz_mon_reg_task_dog( uint32_t  time_out , uint8_t *name  , task_dog_sem_e sem )
* @brief         注册喂狗事件
* @param[in]     TimeOutS 喂狗时间 单位s
* @param[in]     *name 注册任务的名称
* @param[out]    无
* @return        pdPASS 注册成功 ，pdFAIL注册失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_mon_reg_task_dog( uint32_t  time_out , uint8_t *name , task_dog_sem_e sem )
{
    return mon_reg_task_dog(  time_out , name   , sem);
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mon_remove_task_dog(void)
* @brief         删除监控看门狗
* @param[in]     无
* @param[out]    无
* @return        pdFAIL 删除失败 pdPASS 删除成功
* @attention     必须在任务中使用
*******************************************************************************/
uint32_t gaoz_mon_remove_task_dog(void)
{
    return mon_remove_task_dog();
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mon_reset_task_dog( void )
* @brief         复位看门狗时间
* @param[in]     无
* @param[out]    无
* @return        pdFAIL 复位失败 pdPASS 复位成功
* @attention     必须在任务中使用
*******************************************************************************/
uint32_t gaoz_mon_reset_task_dog( void )
{
    return mon_reset_task_dog();
}

/** ****************************************************************************
* @remarks       uint8_t gaoz_sys_hard_state_get(system_hardware_e hard_id )
* @brief         获取系统的硬件状态
* @param[in]     hara_id 获取硬件状态的ID 
* @param[out]    无
* @return        data_out 输出针对状态的数据
* @attention     无
*******************************************************************************/
uint8_t gaoz_sys_hard_state_get(system_hardware_e hard_id )
{
    return sys_hard_state_get(hard_id );
}

/** ****************************************************************************
* @remarks       void gaoz_sys_hard_state_set(system_hardware_e hara_id ,uint8_t data_in)
* @brief         设置系统的硬件状态
* @param[in]     hara_id 获取硬件状态的ID 
* @param[in]     data_in 设置的指定状态的数据
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_sys_hard_state_set(system_hardware_e hara_id ,uint8_t data_in)
{
    sys_hard_state_set(hara_id ,data_in);
}

/** ****************************************************************************
* @remarks       uint8_t gaoz_sys_switch_state_get(system_witch_e switch_id )
* @brief         获取硬件的开关状态
* @param[in]     switch_id 获取硬件状态的ID 
* @param[out]    无
* @return        返回指定状态的数据
* @attention     无
*******************************************************************************/
uint8_t gaoz_sys_switch_state_get(system_witch_e switch_id )
{
    return sys_switch_state_get(switch_id );
}
/** ****************************************************************************
* @remarks       void gaoz_sys_switch_state_set(system_witch_e switch_id ,uint8_t data_in)
* @brief         设置系统开关状态
* @param[in]     switch_id 设置系统开关状态的ID 
* @param[in]     data_in 设置设置系统开关状态
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_sys_switch_state_set(system_witch_e switch_id ,uint8_t data_in)
{
    sys_switch_state_set(switch_id ,data_in);
}

/** ****************************************************************************
* @remarks       void gaoz_sys_state_state_set(system_state_e state_id ,uint8_t data_in)
* @brief         设置系统状态
* @param[in]     state_id 设置系统状态的ID
* @param[in]     data_in 设置系统状态
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_sys_state_state_set(system_state_e state_id ,uint8_t data_in)
{
    sys_state_state_set(state_id ,data_in);
}
/** ****************************************************************************
* @remarks       system_work_mode_s gaoz_sys_work_mode_get(void)
* @brief         获取系统总状态
* @param[in]     无
* @param[out]    无
* @return        系统当前的状态
* @attention     无
*******************************************************************************/
system_work_mode_s gaoz_sys_work_mode_get(void)
{
    return sys_work_mode_get();
}

/** ****************************************************************************
* @remarks       void gaoz_sys_work_mode_set(system_work_mode_s data_in)
* @brief         设置系统总状态
* @param[in]     data_in 设置系统总状态的参数
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_sys_work_mode_set(system_work_mode_s data_in)
{
    sys_work_mode_set(data_in);
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_system_wakeup_rtc_time_set( system_rtc_wakeup_t rtc,uint32_t wakeup_time )
* @brief         设置系统唤醒定时器时间
* @param[in]     wakeup_time 设置唤醒时间，单位S。时间小于等于3600S
* @param[out]    无
* @return        pdFAIL 设置失败 pdPASS 设置成功
* @attention     必须在任务中使用
*******************************************************************************/
uint32_t gaoz_system_wakeup_rtc_time_set( system_rtc_wakeup_t rtc,uint32_t wakeup_time )
{
    return system_wakeup_rtc_time_set(rtc, wakeup_time );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_sys_timestamp_delay( uint32_t* plast_timestamp, uint32_t delay )
* @brief         时间戳延时 ，单位S
* @param[in]     delay 延时时间
* @param[out]    plast_timestamp:上次到期时间戳指针
* @return        pdPASS 成功/ pdFAIL失败
* @attention     时间戳到期后自动更新上次时间戳到新时间戳
*******************************************************************************/
uint32_t gaoz_sys_timestamp_delay( uint32_t* plast_timestamp, uint32_t delay )
{
    return sys_timestamp_delay( plast_timestamp , delay );
}

/** ****************************************************************************
* @remarks       void gaoz_sys_abnormal_reset_set( system_abnormal_reset_e data_in )
* @brief         设置系统异常复位标志位
* @param[in]     data_in 设置参数
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_sys_abnormal_reset_set( system_abnormal_reset_e data_in )
{
    sys_abnormal_reset_set( data_in );
}

/***************************LOG TASK 数据处理接口********************************************/
/** ****************************************************************************
* @remarks       uint32_t gaoz_log_debug_send( log_print_mode_enum mode ,char *name ,void * pbuf, uint16_t dlen )
* @brief         添加系统日志打印消息头
* @param[in]     mode 打印日志的模式
* @param[in]     * name 打印日志的任务名称
* @param[in]     * pbuf 打印数据源地址
* @param[in]     dlen 打印数据的长度
* @param[out]    无
* @return        pdPASS 数据发送成功 ， pdFAIL 数据发送失败
* @attention     函数的功能是将打印的数据前装到消息队列中，发送发送给任务进行数据发送
*******************************************************************************/
uint32_t gaoz_log_debug_send( log_print_mode_enum mode ,char *name ,void * pbuf, uint16_t dlen )
{
    return log_debug_send( mode ,name ,pbuf, dlen );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_log_error_code_list_read( uint16_t *err )
* @brief         读取系统错误日志代码
* @param[in]     无
* @param[out]    *err 错误ID代码
* @return        pdPASS 读取数据成功 ， pdFAIL 读取数据失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_log_error_code_list_read( uint16_t *err )
{
    return log_error_code_list_read( err );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_log_error_code_list_len( void )
* @brief         获取取系统错误日志代码 长度
* @param[in]     无
* @param[out]    无
* @return        错误代码长度
* @attention     无
*******************************************************************************/
uint32_t gaoz_log_error_code_list_len( void )
{
    return log_error_code_list_len();
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_log_error_code_list_total_read( uint8_t *err_buf )
* @brief         获取所有的故障代码
* @param[in]     无
* @param[out]    *err_buf 故障代码目标地址
* @return        错误代码长度
* @attention     无
*******************************************************************************/
uint32_t gaoz_log_error_code_list_total_read( uint8_t *err_buf )
{
    return log_error_code_list_total_read( err_buf ); 
}

/***************************RTC 数据处理接口****************************************************/
/** ****************************************************************************
* @remarks       uint32_t gaoz_rtc_sys_get( en_sys_rtc_type_t time_mode, void* pv )
* @brief         获取系统时间
* @param[in]     time_mode 时间模式
* @param[out]    * pv RTC数据的指针 不固定数据格式
* @return        pdPASS 获取时间成功，pdFAIL 获取时间失败
* @attention     函数为半可重入函数,
*******************************************************************************/
uint32_t gaoz_rtc_sys_get( en_sys_rtc_type_t time_mode, void* pv )
{
    return rtc_sys_get( time_mode,pv );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_rtc_sys_set( en_sys_rtc_type_t time_mode, void* pv )
* @brief         设置系统时间
* @param[in]     time_mode 时间模式
* @param[in]     * pv RTC数据的指针 不固定数据格式
* @return        pdPASS 设置时间成功，pdFAIL 设置时间失败
* @attention     函数为半可重入函数
*******************************************************************************/
uint32_t gaoz_rtc_sys_set( en_sys_rtc_type_t time_mode, void* pv )
{
    return rtc_sys_set( time_mode,pv );
}

/***************************NET TASK数据处理接口(TCP/IP)*****************************************/
/** ****************************************************************************
* @remarks       uint32_t gaoz_connect_type_check(uint8_t *pAddr)
* @brief         服务器地址类型判断
* @param[in]     *pAddr 服务器地址
* @param[out]    无
* @return        CONNECT_TYPE_DOMAIN CONNECT_TYPE_IP
* @attention     无
*******************************************************************************/
uint32_t gaoz_connect_type_check(uint8_t *addr)
{
    return connect_type_check(addr);
}

/** ****************************************************************************
* @remarks       void gaoz_socket_default( socket_handle_s *pxSocketHandle )
* @brief         初始化socket 连接参数
* @param[in]     *pxSocketHandle 服务器链接参数
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_socket_default( socket_handle_s *socket_handle )
{
    socket_default( socket_handle );
}

/** ****************************************************************************
* @remarks       uint32_t  gaoz_socket_bind( socket_handle_s *pxSocketHandle, char *Ip, uint16_t Port, protocol_type_e ePtclType, socket_state_fun_t FDiscCallback )
* @brief         初始化socket 连接参数
* @param[in]     char *Ip                        : IP/域名地址
* @param[in]     Port                   : 端口号
* @param[in]     ePtclType       : 连接类型  e_socket_protocol_tcp, e_socket_protocol_udp e_socket_protocol_mqtt
*		        socket_state_fun_t FDiscCallback  : 链接断开时的回调函数
* @param[in]     FDiscCallback  : 链接断开时的回调函数
* @param[out]    *pxSocketHandle : SOCKET句柄
* @return        pdFAIL :失败 pdPASS 成功
* @attention     可重入，已连接的SOCKET会先断开
*******************************************************************************/
uint32_t  gaoz_socket_bind( socket_handle_s *socket_handle, char *ip, uint16_t port, protocol_type_e eptcl_type, socket_state_fun_t fdisc_callback )
{
    return socket_bind( socket_handle, ip, port, eptcl_type, fdisc_callback );
}

/** ****************************************************************************
* @remarks       uint32_t  gaoz_socket_close( socket_handle_s *pxSocketHandle )
* @brief         SOCKET关闭
* @param[in]     *pxSocketHandle : SOCKET句柄
* @param[out]    无
* @return        pdFAIL :失败 pdPASS 成功
* @attention     可重入
*******************************************************************************/
uint32_t  gaoz_socket_close( socket_handle_s *socket_handle )
{
    return socket_close( socket_handle );
}

/** ****************************************************************************
* @remarks       uint32_t  gaoz_socket_connect( socket_handle_s *pxSocketHandle )
* @brief         SOCKET连接
* @param[in]     *pxSocketHandle : SOCKET句柄
* @param[out]    无
* @return        CONNECT_NOINIT CONNECT_OK CONNECT_ERR CONNECT_CONFIG_ERR CONNECT_TIMEOUT
* @attention     半可重入，内部互斥，有阻塞
*******************************************************************************/
uint32_t  gaoz_socket_connect( socket_handle_s *socket_handle )
{
    return socket_connect( socket_handle );
}

/** ****************************************************************************
* @remarks       uint32_t  gaoz_socket_write( socket_handle_s *pxSocketHandle, uint8_t *pData, uint32_t Dlen )
* @brief         SOCKET数据发送
* @param[in]     *pxSocketHandle : SOCKET句柄
* @param[in]     *pData : 数据地址
* @param[in]     Dlen : 数据长度
* @param[out]    无
* @return        pdFAIL :失败 pdPASS 成功
* @attention     可重入，异步模式，无阻塞，队列满时10ms延时等待，返回成功只表示底层
*                接收成功，不意味对方IP已经收到，失败时表示塞队列超时
*******************************************************************************/
uint32_t  gaoz_socket_write( socket_handle_s *socket_handle, uint8_t *pdata, uint32_t dlen )
{ 
    return socket_write( socket_handle, pdata, dlen );
    
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_socket_recv(
*                         socket_handle_s  *pxSocketHandle,
*                         uint8_t *pData,
*                         uint32_t DelayMs )
* @brief         SOCKET数据接收
* @param[in]     *pxSocketHandle : SOCKET句柄
* @param[in]     *pData : 数据地址
* @param[in]     DelayMs : 延时时间
* @param[out]    无
* @return        接收数据的长度
* @attention     可重入,支持异步建立连接、收取数据
*******************************************************************************/
uint32_t  gaoz_socket_recv( socket_handle_s  *socket_handle,uint8_t *pdata,uint32_t delay_ms )
{
    return socket_recv( socket_handle,pdata,delay_ms );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_socket_dns_ip_addr_get( char *dns, char *get_ip )
* @brief         获取域名IP地址
* @param[in]     *dns 域名地址
* @param[out]    *get_ip 解析后的IP地址
* @return        pdFAIL 失败，pdPASS 成功
* @attention     无
*******************************************************************************/
uint32_t gaoz_socket_dns_ip_addr_get( char *dns, char *get_ip )
{
    return net_dns_ip_addr_get( dns, get_ip );
}
/*************************************GNSS TASK 数据处理接口************************************************/
/** ****************************************************************************
* @remarks       uint32_t gaoz_gnss_speed_get( uint32_t *speed )
* @brief         获取GNSS当前的速度
* @param[in]     无
* @param[out]    *speed 当前GNSS的速度 ,不能为空
* @return        pdPASS 数据有效 pdFAIL 数据无效 *speed 当前速度的指针
* @attention     无
*******************************************************************************/
uint32_t gaoz_gnss_speed_get( uint32_t *speed )
{
    return gnss_speed_get( speed );
}

/** ****************************************************************************
* @remarks       void gaoz_gnss_info_now_get( gnss_info_struct *info )
* @brief         获取GNSS最新数据数据信息
* @param[in]     无
* @param[out]    *info GNSS数据的目标地址
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_gnss_info_now_get( gnss_info_struct *info )
{
    gnss_info_now_get( info );
}
/** ****************************************************************************
* @remarks       void gaoz_gnss_info_old_get( gnss_info_struct *info )
* @brief         获取GNSS历史数据
* @param[in]     无
* @param[out]    *info GNSS数据的目标地址
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_gnss_info_old_get( gnss_info_struct *info )
{
    gnss_info_old_get( info );
}
/** ****************************************************************************
* @remarks       uint32_t gaoz_gnss_ant_atate_get( void )
* @brief         获取GNSS模块天线的状态
* @param[in]     无
* @param[out]    无
* @return        GPS_ANT_OK GPS天线正常 ， GPS_ANT_SHORT GPS天线短路 ，GPS_ANT_OPEN GPS天线断路 ，PS_ANT_FAULT GPS天线故障 ，PS_ANT_NOT_Stability GPS天线状态不稳定 AD数据连续采样不一致。
* @attention     无
*******************************************************************************/
uint32_t gaoz_gnss_ant_atate_get( void )
{
    return gnss_ant_atate_get();
}
/** ****************************************************************************
* @remarks       uint32_t gaoz_gnss_status_get( void )
* @brief         获取GNSS模块的状态
* @param[in]     无
* @param[out]    无
* @return        GNSS_ANT_ERR 天线异常  GNSS_MOD_OK 模块正常 GNSS_POS_OK 定位正常
* @attention     无
*******************************************************************************/
uint32_t gaoz_gnss_status_get( void )
{
    return gnss_status_get();
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_gnss_mileage_get( void )
* @brief         获取GNSS 计算累积里程
* @param[in]     无
* @param[out]    无
* @return        GNSS里程 单位，米
* @attention     无
*******************************************************************************/
uint32_t gaoz_gnss_mileage_get( void )
{
    return gnss_mileage_get();
}

/** ****************************************************************************
* @remarks       void gaoz_gnss_mileage_set( void )
* @brief         设置GNSS 计算累积里程
* @param[in]     mil  设置当前车辆运行的距离，单位米
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_gnss_mileage_set( uint32_t mil )
{
    gnss_mileage_set(  mil );
}

/** ****************************************************************************
* @remarks       gaoz_agnss_location_type_e gaoz_agnss_location_st_get( void )
* @brief         AGNSS 定位状态获取
* @param[in]     无
* @param[out]    无
* @return        返回AGNSS 辅助定位的状态
* @attention     无
*******************************************************************************/
agnss_location_type_e gaoz_agnss_location_st_get( void )
{
    return agnss_location_st_get();
}

/** ****************************************************************************
* @remarks       uint8_t gaoz_gnss_lbs_position_type_read( void )
* @brief         GNSS LBS 辅助定位类型
* @param[in]     无
* @param[out]    无
* @return        定位类型，0:没有得到定位结果;1:gps 定位结果;2:wifi定位结果;3:混合定位 结果;4:基站定位结果;5:其他--
* @attention     无
*******************************************************************************/
uint8_t gaoz_gnss_lbs_position_type_read( void )
{
    return gnss_lbs_position_type_read();  
}

/**************************************MCU_TASK 数据处理接口**************************************************/

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_uart_driver_open( mcu_uart_driver_callback_t recv_cb ,mcu_uart_state_callback_t state_cb )
* @brief         打开MCU 底层数据操作
* @param[in]     recv_cb 接收数据的回调函数 
* @param[out]    无
* @return        pdPASS 打开成功，pdFAIL打开失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_mcu_uart_driver_open( mcu_uart_driver_callback_t recv_cb ,mcu_uart_state_callback_t state_cb )
{
    return mcu_uart_driver_open( recv_cb , state_cb );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_uart_driver_write( uint8_t *pbuf , uint16_t dlen )
* @brief         MCU串口发送数据
* @param[in]     *pbuf 数据源地址
* @param[in]     dlen 数据长度
* @param[out]    无
* @return        pdPASS发送成功 ，  pdFAIL发送失败
* @attention     将发送的数据消息队列中，发送给任务进行数据发送。
*******************************************************************************/
uint32_t gaoz_mcu_uart_driver_write( uint8_t *pbuf , uint16_t dlen )
{
    return mcu_uart_driver_write( pbuf , dlen );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_uart_driver_close( void )
* @brief         MCU底层串口关闭
* @param[in]     无
* @param[out]    无
* @return        pdPASS关闭成功 ，  pdFAIL关闭失败
* @attention     
*******************************************************************************/
uint32_t gaoz_mcu_uart_driver_close( void )
{
    return mcu_uart_driver_close();
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_can_cfg_wf_handle( uint8_t *data, uint16_t len, uint32_t timeout )
* @brief         CAN CFG 参数 写入FLASH 操作接口
* @param[in]     *data 数据源地址，len 数据长度，timeout 阻塞时间，单位ms。0非阻塞。
* @param[out]    无
* @return        pdPASS 成功    pdFAIL 失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_mcu_can_cfg_wf_handle( uint8_t *data, uint16_t len, uint32_t timeout )
{
    return mcu_can_cfg_wf_handle( data, len, timeout );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_can_cfg_dev_handle( uint32_t timeout )
* @brief         CAN CFG 参数 配置驱动
* @param[in]     timeout 阻塞时间，单位ms。0非阻塞。
* @param[out]    无
* @return        pdPASS 成功    pdFAIL 失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_mcu_can_cfg_dev_handle( uint32_t timeout )
{
    return mcu_can_cfg_dev_handle( timeout );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_can_cfg_can_recv_handle( uint8_t *data, uint16_t len, uint16_t sn, uint16_t id, uint32_t timeout )
* @brief         CAN 数据接收处理
* @param[in]     *data 数据目标地址，*len 数据长度，sn序列号，id ,timeout 阻塞时间，单位ms。0非阻塞。
* @param[out]    无
* @return        pdPASS 成功，pdFAIL 失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_mcu_can_cfg_can_recv_handle( uint8_t *data, uint16_t len, uint16_t sn, uint16_t id, uint32_t timeout )
{
    return mcu_can_cfg_can_recv_handle( data, len, sn, id, timeout );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_can_cfg_unit_index_handle( mcu_can_cfg_para_t *para, uint32_t timeout )
* @brief         CAN CFG  UNIT INDEX 数据获取
* @param[in]     index 节点，timeout 阻塞时间，单位ms。0非阻塞。
* @param[out]    *data 数据目标地址，*len数据长度目标地址，*state 数据状态目标地址
* @return        pdPASS 成功，pdFAIL 失败
* @attention    *len为0时表示没有任何数据。
                *state 数据类型分为3种，1 - 数据、2 - 状态、3 - 字符，当返回状态为pdFAIL时状态为0
                 timeout为0时表示为非阻塞，data、len、state 指针可以为NULL
                当state 数据类型为数据时，需要使用 bytes_to_double( uint8_t *bytes )函数进行转换，数据长度为8；
                当state数据类型为状态、字符时按住顺序进行读取
*******************************************************************************/
uint32_t gaoz_mcu_can_cfg_unit_index_handle( uint8_t index,uint8_t *data,uint16_t *len,uint8_t *state, uint32_t timeout )
{
    return mcu_can_cfg_unit_index_handle( index,data,len,state, timeout );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_can_cfg_dtc_index_handle( uint8_t index,uint8_t *data,uint16_t *len,uint8_t *state, uint32_t timeout )
* @brief         CAN CFG  DTC INDEX 数据获取
* @param[in]     index 节点，timeout 阻塞时间，单位ms。0非阻塞。
* @param[out]   *data 数据目标地址，*len数据长度目标地址，*state 数据状态目标地址
* @return        pdPASS 成功，pdFAIL 失败
* @attention    *len为0时表示没有任何数据。
                *state 数据类型分为3种，1 - 数据、2 - 状态、3 - 字符，当返回状态为pdFAIL时状态为0
                 timeout为0时表示为非阻塞，data、len、state 指针可以为NULL
*******************************************************************************/
uint32_t gaoz_mcu_can_cfg_dtc_index_handle( uint8_t index,uint8_t *data,uint16_t *len,uint8_t *state, uint32_t timeout )
{
    return mcu_can_cfg_dtc_index_handle( index,data,len,state, timeout );
}

/** ****************************************************************************
* @remarks       void gaoz_mcu_can_cfg_unit_index_handle_cb_set( mcu_can_cfg_callback_t  fun )
* @brief         设置UNIT INDEX 处理回调函数
* @param[in]     fun API 函数地址
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_mcu_can_cfg_unit_index_handle_cb_set( mcu_can_cfg_callback_t  fun )
{
    mcu_can_cfg_unit_index_handle_cb_set(  fun);
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_can_cfg_version_get( uint8_t *ver )
* @brief         获取MCU 配置表版本号
* @param[in]     *ver 读取版本号源地址
* @param[out]    无
* @return        pdPASS 成功 pdFAIL 失败
* @attention     ver 传入的地址长度大于SYS_CONFIG_VERSION_MAX_LEN
*******************************************************************************/
uint32_t gaoz_mcu_can_cfg_version_get( uint8_t *ver )
{
    return mcu_can_cfg_version_get( ver );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_can_mcu_version_get( uint8_t *version, uint32_t *len )
* @brief         获取MCU系统版本号
* @param[in]     无
* @param[out]    *version 版本号目标地址， *len 版本号长度
* @return        pdPASS成功/pdFAIL失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_mcu_can_mcu_version_get( uint8_t *version, uint32_t *len )
{
    return mcu_can_mcu_version_get( version, len );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_mcu_can_mcu_port_control( mcu_can_port_control_status_e port_control, mcu_port_cfg_infor_t  port_cfg , uint16_t *out )
* @brief         MCU PORT 控制操作
* @param[in]     port_control 控制类型；port_cfg 端口配置
* @param[out]    *out 数据输出：
* @return        pdPASS成功/pdFAIL失败
* @attention     out 数据输出，为OUTPUT 时返回控制状态，INPUT 输入状态，ADC 数据
*******************************************************************************/
uint32_t gaoz_mcu_can_mcu_port_control( mcu_can_port_control_status_e port_control, mcu_port_cfg_infor_t port_cfg , uint16_t *out )
{
    return mcu_can_mcu_port_control( port_control, port_cfg, out );
}

/**************************************USB_TASK 数据处理接口**************************************************/

/** ****************************************************************************
* @remarks       uint32_t gaoz_usb_driver_send_data( uint8_t *data , uint16_t len )
* @brief         USB底层发送数据
* @param[in]     *data 发送数据的源地址
* @param[in]     len 发送数据的长度
* @param[out]    无
* @return        pdPASS 发送数据成功 ， pdFAIL 发送数据失败
* @attention     带有互锁机制，支持多任务使用；
*******************************************************************************/
uint32_t gaoz_usb_driver_send_data( uint8_t *data , uint16_t len )
{
    return usb_driver_send_data( data , len );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_usb_driver_recv_data( uint8_t *data , uint16_t *len , uint32_t time)
* @brief         USB底层发送数据
* @param[in]     time 读取数据阻塞的时间 单位ms
* @param[out]    *data 目标地址
* @param[out]    *len 数据长度
* @return        pdPASS 接收数据成功 ， pdFAIL 接收数据失败
* @attention     函数内部有阻塞功能，可以通过设置时间选择阻塞的时间长度，为0时一直阻塞
*******************************************************************************/
uint32_t gaoz_usb_driver_recv_data( uint8_t *data , uint16_t *len , uint32_t time)
{
    return usb_driver_recv_data( data , len , time );
}

/**************************************SAVE_TASK 数据处理接口**************************************************/

/** ****************************************************************************
* @remarks       uint32_t gaoz_save_data_open( sfb_buf_rt_t *sfb_handle ,const sfb_setting_t *sfb_set , uint32_t *handle_id )
* @brief         打开SAVE 数据，进行初始
* @param[in]     *sfb_handle SFB 句柄地址
* @param[in]     *sfb_set SFB设置的地址参数
* @param[out]    *handle_id
* @return        pdPASS 成功 pdFAIL 失败
* @attention     必须在任务中运行
*******************************************************************************/
uint32_t gaoz_save_data_open( sfb_buf_rt_t *sfb_handle ,const sfb_setting_t *sfb_set , uint32_t *handle_id )
{
    return save_data_open( sfb_handle ,sfb_set ,handle_id );
}

/** ****************************************************************************
* @remarks       uint32_t save_data_write( sfb_buf_rt_t *sfb_handle ,uint8_t *data, uint16_t dlen )
* @brief         写FLASH 数据
* @param[in]     handle_id SAVE句柄地址ID
* @param[in]     *data 保存的数据地址
* @param[in]     dlen 保存的数据长度
* @param[out]    无
* @return        pdPASS 成功 ， pdFAIL 失败
* @attention     可重入函数 内部互斥
*******************************************************************************/
uint32_t gaoz_save_data_write( uint32_t handle_id ,uint8_t *data, uint16_t dlen )
{
    return save_data_write( handle_id ,data, dlen );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_save_data_read( sfb_buf_rt_t *sfb_handle ,uint8_t *data, uint16_t *dlen )
* @brief         读FLASH 数据
* @param[in]     handle_id SAVE句柄地址 ID
* @param[out]    *data 数据的目标地址
* @param[out]    *dlen 数据的长度
* @return        返回 数据包的长度 等于0时没有数据
* @attention     可重入函数 内部互斥
*******************************************************************************/
uint32_t gaoz_save_data_read( uint32_t handle_id ,uint8_t *data, uint16_t *dlen )
{
    return save_data_read( handle_id ,data, dlen );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_save_data_close( sfb_buf_rt_t *sfb_handle )
* @brief         关闭FLASH 句柄操作
* @param[in]     handle_id SAVE句柄地址ID
* @param[out]    无
* @return        pdPASS  成功 ， pdFAIL  失败
* @attention     可重入函数 内部互斥
*******************************************************************************/
uint32_t gaoz_save_data_close( uint32_t handle_id )
{
    return save_data_close( handle_id );
}



/** ****************************************************************************
* @remarks       uint32_t gaoz_save_mcu_data_infor_init( void )
* @brief         MCU关键信息初始化，主要就是用来读取当前最新的数据。
* @param[in]     无
* @param[out]    无
* @return        pdPASS 成功，pdFAIL 失败；
* @attention     无
*******************************************************************************/
uint32_t gaoz_save_mcu_data_infor_init( void )
{
    return save_mcu_data_infor_init();
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_save_mcu_data_infor_write( uint8_t *data, uint8_t len )
* @brief         写MCU关键性数据信息
* @param[in]     *data 数据源地址
* @param[out]    *dlen 数据长度
* @return        pdPASS 成功，pdFAIL 失败；
* @attention     无
*******************************************************************************/
uint32_t gaoz_save_mcu_data_infor_write( uint8_t *data, uint8_t dlen )
{
    return save_mcu_data_infor_write( data, dlen );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_save_mcu_data_infor_read( uint8_t *data, uint8_t dlen )
* @brief         读取MCU关键性数据信息（最新的数据）
* @param[out]    *data 数据目标地址
* @param[out]    *dlen 数据长度
* @return        pdPASS 成功，pdFAIL 失败；
* @attention     无
*******************************************************************************/
uint32_t gaoz_save_mcu_data_infor_read( uint8_t *data, uint8_t *dlen )
{
    return save_mcu_data_infor_read( data, dlen );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_save_vin_data_infor_write( uint8_t *data, uint16_t dlen )
* @brief         写VIN关键性数据信息
* @param[in]     *data 数据源地址
* @param[in]    *dlen 数据长度
* @return        pdPASS 成功，pdFAIL 失败；
* @attention     无
*******************************************************************************/
uint32_t gaoz_save_vin_data_infor_write( uint8_t *data, uint16_t dlen )
{
    return save_vin_data_infor_write( data, dlen );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_save_vin_data_infor_read( uint8_t *data, uint16_t dlen )
* @brief         读取VIN关键性数据信息
* @param[in]     dlen 读取数据长度
* @param[out]    *data 数据目标地址地址
* @return        pdPASS 成功，pdFAIL 失败；
* @attention     无
*******************************************************************************/
uint32_t gaoz_save_vin_data_infor_read( uint8_t *data, uint16_t dlen )
{
    return save_vin_data_infor_read( data, dlen );
}


/**************************************BLE_TASK 数据处理接口**************************************************/

/** ****************************************************************************
* @remarks       uint32_t gaoz_ble_drive_open( char *ble_name ,ble_drive_state_callback_t statr_cb )
* @brief         打开BLE蓝牙
* @param[in]     *ble_name BLE蓝牙名称 
* @param[out]    无
* @return        pdPASS 成功 pdFAIL 失败
* @attention     必须在任务中运行
*******************************************************************************/
uint32_t gaoz_ble_drive_data_open( char *ble_name ,ble_drive_state_callback_t statr_cb )
{
    return ble_drive_data_open( ble_name , statr_cb );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_ble_drive_data_write( uint8_t *data , uint16_t len )
* @brief         写BLE发送数据
* @param[in]     *data 发送数据地址
* @param[in]     len 发送数据的长度
* @param[out]    无
* @return        pdPASS 成功 pdFAIL 失败
* @attention     必须在任务中运行
*******************************************************************************/
uint32_t gaoz_ble_drive_data_write( uint8_t *data , uint16_t len )
{
    return ble_drive_data_write(  data ,  len );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_ble_drive_data_read( uint8_t *data , uint16_t *len , uint32_t time_out )
* @brief         读取BLE接收到的数据
* @param[out]     *data 接收的数据地址
* @param[out]    *len 接收数据的长度
* @param[out]    time_out 读取数据阻塞的时间 单位ms
* @return        pdPASS 成功 pdFAIL 失败
* @attention     必须在任务中运行，可以设置阻塞的时间，将任务挂起；
*******************************************************************************/
uint32_t gaoz_ble_drive_data_read( uint8_t *data , uint16_t *len , uint32_t time_out )
{
    return ble_drive_data_read(  data ,  len ,  time_out );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_ble_drive_data_close( void )
* @brief         关闭BLE功能
* @param[in]     
* @param[out]    无
* @return        pdPASS 成功 pdFAIL 失败
* @attention     必须在任务中运行
*******************************************************************************/
uint32_t gaoz_ble_drive_data_close( char *ble_name )
{
    return ble_drive_data_close( ble_name );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_ble_drive_macaddr_read( char *mac_addr )
* @brief         读取BLE MAC物理地址
* @param[in]     无
* @param[out]    mac_addr 目标地址
* @return        pdPASS 成功 pdFAIL 失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_ble_drive_macaddr_read( char *mac_addr )
{
    return ble_drive_macaddr_read( mac_addr );
}

/**************************************PORT_TASK 数据处理接口**************************************************/

/** ****************************************************************************
* @remarks       uint8_t gaoz_port_ext_gpio_st_get( gpio_input_channel_e )
* @brief         获取外部IO口的状态
* @param[in]     channel 选择的获取IO的通道
* @param[out]    无
* @return        返回输入IO口的状态 0 低电平 1高电平
* @attention     无
*******************************************************************************/
uint8_t gaoz_port_ext_gpio_st_get( gpio_input_channel_e channel )
{
    return port_ext_gpio_st_get( channel );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_port_adc_gpio_value_get( gpio_adc_channel_e channel )
* @brief         获取外部ADC 采集的数据
* @param[in]     channel 选择ADC的通道
* @param[out]    无
* @return        ADC数值
* @attention     无
*******************************************************************************/
uint32_t gaoz_port_adc_gpio_value_get( gpio_adc_channel_e channel )
{
    return port_adc_gpio_value_get( channel );
}


/**************************************GSEN_TASK 数据处理接口**************************************************/

/** ****************************************************************************
* @remarks       uint32_t gaoz_gsen_sensor_data_read( gsen_bmi160_info_t *info )
* @brief         读取加速度传感器数据，获取当前的状态。
* @param[in]     无
* @param[out]    *info 数据输出指针
* @return        pdPASS 成功 ；pdFAIL 失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_gsen_sensor_data_read( gsen_bmi160_info_t *info )
{
    return gsen_sensor_data_read( info );
}

/** ****************************************************************************
* @remarks       gsen_bmi160_work_state_e gaoz_gsen_sensor_work_st_get( void )
* @brief         获取加速度传感器的工作状态
* @param[in]     无
* @param[out]    无
* @return        GSEN_WORK_ST_ERR 状态失败  GSEN_WORK_ST_OK 状态成功
* @attention     无
*******************************************************************************/
gsen_bmi160_work_state_e gaoz_gsen_sensor_work_st_get( void )
{
    return gsen_sensor_work_st_get();
}

/** ****************************************************************************
* @remarks       void gaoz_sgsen_sensor_state_cb_set( gsen_state_fun_t fun )
* @brief         设置GSEN状态的回调函数
* @param[in]     fun 回调函数指针
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_sgsen_sensor_state_cb_set( gsen_state_fun_t fun )
{
    gsen_sensor_state_cb_set( fun );
}

/**************************************POWER_TASK 数据处理接口**************************************************/

/** ****************************************************************************
* @remarks       uint32_t power_man_wakeup_source_get( wakeup_event_t *event )
* @brief         获取系统唤醒列表事件
* @param[in]     source 唤醒源
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
uint32_t gaoz_power_man_wakeup_source_get( wakeup_source_e source )
{
    return power_man_wakeup_source_get( source );
}
/** ****************************************************************************
* @remarks       void gaoz_power_man_wakeup_task_num_run( void )
* @brief         唤醒任务运行
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_power_man_wakeup_task_num_run( void )
{
    power_man_wakeup_task_num_run(  );
}

/** ****************************************************************************
* @remarks       void gaoz_power_man_wakeup_task_num_stop( void )
* @brief         唤醒任务停止
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_power_man_wakeup_task_num_stop( void )
{
    power_man_wakeup_task_num_stop(  );
}

/** ****************************************************************************
* @remarks       void gaoz_power_man_wakeup_task_num_clean( void )
* @brief         唤醒任务清楚
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_power_man_wakeup_task_num_clean( void )
{
    power_man_wakeup_task_num_clean();
}

/**************************************EVENT_TASK 数据处理接口**************************************************/

/** ****************************************************************************
* @remarks       uint32_t gaoz_event_input_data_set( event_input_data_t event )
* @brief         设置事件数据
* @param[in]     event  设置数据类型
* @param[in]     data 设置的数据
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_event_input_data_set( event_input_e event , uint32_t data )
{
    event_input_data_set( event , data );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_event_input_data_get( event_input_e event )
* @brief         设置事件数据
* @param[in]     event  设置数据类型
* @param[out]    无
* @return        返回查询的数据
* @attention     无
*******************************************************************************/
uint32_t gaoz_event_input_data_get( event_input_e event )
{
    return event_input_data_get( event );
}



/** ****************************************************************************
* @remarks       void gaoz_qxwz_inject_cfg_init( qxwz_save_cfg_infor_t *qwxz_cfg )
* @brief         初始化QXWZ 配置参数
* @param[in]     qwxz_cfg 初始化数据
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
void gaoz_qxwz_inject_cfg_init( qxwz_save_cfg_infor_t *qwxz_cfg )
{
    qxwz_inject_cfg_init( qwxz_cfg );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_qxwz_inject_cfg_save_flash_write( qxwz_save_cfg_t qwxz_cfg )
* @brief         保存QXWZ 配置参数到外部FLASH中
* @param[in]     *qwxz_cfg 保存数据源地址
* @param[out]    无
* @return        pdPASS 成功 pdFAIL 失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_qxwz_inject_cfg_save_flash_write( qxwz_save_cfg_infor_t *qwxz_cfg )
{
    return qxwz_inject_cfg_save_flash_write( qwxz_cfg );
}

/** ****************************************************************************
* @remarks       uint32_t gaoz_qxwz_inject_cfg_save_flash_read( qxwz_save_cfg_t *qwxz_cfg )
* @brief         读取 QXWZ 配置参数
* @param[in]     无
* @param[out]    *qwxz_cfg 读取数据目标地址
* @return        pdPASS 成功 pdFAIL 失败
* @attention     无
*******************************************************************************/
uint32_t gaoz_qxwz_inject_cfg_save_flash_read( qxwz_save_cfg_infor_t *qwxz_cfg )
{
    return qxwz_inject_cfg_save_flash_read( qwxz_cfg );
}

